package com.zpark.se.thread;

import java.util.Stack;

public class StackDemo01 {
    // 定义栈
    Stack<String> s = new Stack<>();

    // 压栈方法
    public synchronized void push(String str) {
        s.push(str); // 元素入栈
        // 唤醒线程
        // this.notify(); // 随机唤醒一个线程
        this.notifyAll(); // 唤醒所有等待的线程
    }

    // 元素出栈方法
    public synchronized void pop() {
        while (s.isEmpty()) {
            // 栈为空，循环等待元素入栈
            try {
                this.wait(); // 主动释放锁
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(s.pop()); // 输出取出的元素
    }
}
